package cn.com.surker.oa.service;

import cn.com.surker.oa.entity.OaSupplier;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
* <p>
    * 供应商 服务类
    * </p>
*
* @author admin
* @since 2022-10-05
*/
public interface OaSupplierService extends IService<OaSupplier> {

	/**
	 * 查询关联供应商的信息
	 * @param type
	 * @param supplierId
	 * @return
	 */
	List<Map<String, Object>> findRelationSupplier(Integer type, Long supplierId);

	/**
	 * 保存 / 取消 关联公司
	 * @param supplierId
	 * @param orgId
	 * @param type
	 * @param updateId 用户ID
	 * @return
	 */
	Integer saveRelation(Long supplierId, Long orgId, Integer type, Integer status, Long updateId);

	/**
	 * 根据关联公司查询供应商信息
	 * @return
	 */
	List<OaSupplier> queryByOrgV1(Long orgId);

	/**
	 * 查询材料合同关联供应商
	 * @param contractId
	 * @return
	 */
	List<OaSupplier> queryByContractId(Long orgId, Long contractId);

    /**
     * 根据关联公司查询供应商信息
     * @return
     */
    List<OaSupplier> queryByOrg();
	/**
	 * 分页查询供应商含关联类型、公司
	 * @param searchVal 搜索条件
	 * @param status 状态(0:启用1:禁用)
	 * @param offset 分页起始位置
	 * @param limit 每页大小
	 * @return
	 */
	IPage queryByPageV2(String searchVal, Long orgId, String type, Integer offset, Integer limit);

	/**
	 * 分页查询供应商
	 * @param searchVal 搜索条件
	 * @param status 状态(0:启用1:禁用)
	 * @param offset 分页起始位置
	 * @param limit 每页大小
	 * @return
	 */
	IPage queryByPageV1(String searchVal, Long orgId, Integer status, Integer type, Integer offset, Integer limit);

    /**
     * 分页查询供应商
     * @param searchVal 搜索条件
     * @param status 状态(0:启用1:禁用)
     * @param offset 分页起始位置
     * @param limit 每页大小
     * @return
     */
    IPage queryByPage(String searchVal, Long orgId, Integer status, Integer type, Integer offset, Integer limit);

    /**
     * 同步材料供应商
     */
    void synMaterialSupplier();

    /**
     * 添加供应商
     * @param code 供应商code码
     * @param name 简称
     * @param fullName 全称
     * @param legal 法人代表
     * @param orgId 工厂ID
     * @param orgName 工厂名称
     * @param phone 联系方式
     * @param type 类型(0:材料1:生产)
     * @param address 公司地址
     * @return
     */
    Integer saveSupplier(String code, String name, String fullName, String legal, Long orgId, String orgName,
                         String phone, Integer type, String address, String remark, Double initialAmount, Date initialDate);

    /**
     * 修改供应商
     * @param id 记录ID
     * @param code 供应商code码
     * @param name 简称
     * @param fullName 全称
     * @param legal 法人代表
     * @param phone 联系方式
     * @param type 类型(0:材料1:生产)
     * @param address 公司地址
     * @param status 状态(0:启用1:禁用)
     * @param initialAmount
	 * @param initialDate
	 * @return
     */
    Integer updateSupplier(Long id, String code, String name, String fullName, String legal, String phone,
                           Integer type, String address, String remark, Integer status, Double initialAmount, Date initialDate, Long uid);


	/**
	 * 同步erp数据
	 */
	void syncErp2();

	/**
	 * 查询oa系统中的供应商,根据社会信用码查询
	 *
	 * @param code 供应商信用码
	 * @return
	 */
	OaSupplier queryOaDataByCode(String code);

	/**
	 * 根据供应商名查询
	 *
	 * @param name
	 * @return
	 */
	OaSupplier queryOaDataByName(String name);

	/**
	 * 根据供应商唯一码何名称查询数据
	 * @param code
	 * @param name
	 * @return
	 */
	OaSupplier queryOaDataByCodeAndName(String code, String name);

	/**
	 * 同步供应商联系人
	 */
	void synLink();
}
